স্প্রিং জেডিবিসি (Spring JDBC) এ PreparedStatement
ব্যবহারের মাধ্যমে SQL কোয়েরি রচনা ও রান করার প্রক্রিয়াটি আরও সুরক্ষিত এবং কার্যকরী হয়ে ওঠে। এটি SQL ইনজেকশন (SQL Injection) প্রতিরোধে সহায়ক এবং কোডকে আরও পাঠযোগ্য ও রক্ষণাবেক্ষণযোগ্য করে তোলে।
PreparedStatement
ব্যবহারস্প্রিং জেডিবিসি সাধারণত JdbcTemplate
এর মাধ্যমে PreparedStatement
ব্যবহার করতে সক্ষম করে। JdbcTemplate
এর update()
, queryForObject()
, query()
এবং অন্যান্য মেথডগুলি স্বয়ংক্রিয়ভাবে PreparedStatement
তৈরি করে এবং এগুলোর মাধ্যমে SQL এক্সিকিউট করা হয়।
নিচে একটি উদাহরণ দেয়া হলো যা স্প্রিং জেডিবিসি তে PreparedStatement
এর ব্যবহার দেখাবে।
PreparedStatement
ব্যবহারএখানে JdbcTemplate
এর মাধ্যমে একটি INSERT
স্টেটমেন্ট ব্যবহার করা হয়েছে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class EmployeeDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// Method to insert employee details into the database
public void addEmployee(int id, String name, double salary) {
String sql = "INSERT INTO Employee (id, name, salary) VALUES (?, ?, ?)";
// Use JdbcTemplate's update() method to execute the PreparedStatement
jdbcTemplate.update(sql, id, name, salary);
}
}
ব্যাখ্যা:
?
চিহ্নগুলো প্রিপেয়ারড স্টেটমেন্ট এর প্লেসহোল্ডার হিসেবে ব্যবহৃত হয়েছে।jdbcTemplate.update(sql, id, name, salary);
এই লাইনটি PreparedStatement
তৈরি করে এবং SQL স্টেটমেন্ট এক্সিকিউট করে।PreparedStatement
ব্যবহারএখন একটি SELECT
কোয়েরি ব্যবহারের উদাহরণ দেখানো হচ্ছে, যেখানে PreparedStatement
ব্যবহার করে ডেটা রিটার্ন করা হচ্ছে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class EmployeeDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// Method to fetch employee details by ID
public Employee getEmployee(int id) {
String sql = "SELECT * FROM Employee WHERE id = ?";
// Use JdbcTemplate's queryForObject() method to execute the PreparedStatement
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(Employee.class));
}
}
ব্যাখ্যা:
queryForObject
মেথডটি PreparedStatement
ব্যবহার করে SQL কোয়েরি রচনা করে এবং id
এর ভিত্তিতে Employee
অবজেক্ট ফিরিয়ে দেয়।BeanPropertyRowMapper
হল একটি স্প্রিং ক্লাস যা রেজাল্ট সেটের প্রতিটি সারি থেকে প্রপার্টি মেপ করে আপনার Employee
ক্লাসে ম্যাপ করে।PreparedStatement
ব্যবহারএখানে একটি UPDATE
কোয়েরি উদাহরণ দেওয়া হচ্ছে:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class EmployeeDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// Method to update employee salary
public void updateSalary(int id, double newSalary) {
String sql = "UPDATE Employee SET salary = ? WHERE id = ?";
// Use JdbcTemplate's update() method to execute the PreparedStatement
jdbcTemplate.update(sql, newSalary, id);
}
}
ব্যাখ্যা:
update()
মেথডের মাধ্যমে PreparedStatement
ব্যবহার করা হয়েছে। এটি salary
আপডেট করার জন্য id
এবং newSalary
ইনপুট হিসেবে নেয়।PreparedStatement
ব্যবহারএখানে একটি DELETE
কোয়েরি ব্যবহারের উদাহরণ:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class EmployeeDao {
@Autowired
private JdbcTemplate jdbcTemplate;
// Method to delete employee by ID
public void deleteEmployee(int id) {
String sql = "DELETE FROM Employee WHERE id = ?";
// Use JdbcTemplate's update() method to execute the PreparedStatement
jdbcTemplate.update(sql, id);
}
}
ব্যাখ্যা:
update()
মেথডের মাধ্যমে DELETE
SQL স্টেটমেন্ট তৈরি করে এবং id
প্রেরণ করা হয়, যার মাধ্যমে নির্দিষ্ট Employee
রেকর্ড মুছে ফেলা হয়।PreparedStatement
এর ব্যবহার SQL ইনজেকশন থেকে রক্ষা করে, কারণ এখানে ব্যবহারকারী ইনপুটগুলো যথাযথভাবে escape করা হয়।PreparedStatement
একই SQL কোডের জন্য পুনরায় ব্যবহার করা যায়, যার ফলে কর্মক্ষমতা উন্নত হয়।স্প্রিং জেডিবিসি (Spring JDBC) এ PreparedStatement
ব্যবহার করা বেশ সহজ এবং কার্যকরী। এটি ডেটাবেস অপারেশনের নিরাপত্তা এবং কর্মক্ষমতা বৃদ্ধির জন্য সহায়ক, বিশেষ করে যখন আপনি ব্যবহারকারীর ইনপুট দিয়ে SQL কোয়েরি তৈরি করেন। JdbcTemplate
স্প্রিং এর মধ্যে একদম সহজভাবে PreparedStatement
পরিচালনা করতে সাহায্য করে।
PreparedStatement হল Java Database Connectivity (JDBC) API-তে একটি ইন্টারফেস, যা SQL কুয়েরি বা স্টেটমেন্ট তৈরি এবং এক্সিকিউট করতে ব্যবহৃত হয়। এটি সাধারণ Statement
এর তুলনায় আরও নিরাপদ, দ্রুত, এবং দক্ষ। Spring JDBC তে PreparedStatement
ব্যবহৃত হয়, কারণ এটি ডেটাবেসের সাথে কার্যকরভাবে যোগাযোগ করতে সাহায্য করে এবং SQL ইনজেকশন থেকে রক্ষা করে।
PreparedStatement
হল একটি প্রিপেইরড (precompiled) SQL কুয়েরি, যা একবার তৈরি করা হলে পরে একাধিক বার ডেটাবেসে এক্সিকিউট করা যায়। এর মাধ্যমে SQL কুয়েরি চালানোর সময়, প্যারামিটারগুলির জন্য প্লেসহোল্ডার (যেমন ?
) ব্যবহার করা হয় এবং পরে ডাইনামিকভাবে প্যারামিটার ভ্যালু ইনপুট করা যায়। এটি SQL কুয়েরি এক্সিকিউশনের গতিবিধি দ্রুত করে এবং একই কুয়েরি বারবার ডেটাবেসে ব্যবহার করার ক্ষেত্রে পারফরম্যান্স উন্নত করে।
PreparedStatement
এই ধরনের ঝুঁকি কমায় কারণ এটি ইউজার ইনপুটকে ডেটাবেস কুয়েরি হিসেবে প্যারামিটারাইজ করে এবং SQL কোড থেকে আলাদা রাখে। ফলে ইউজার ইনপুট কখনোই কোড হিসেবে এক্সিকিউট হয় না।PreparedStatement
ব্যবহারে SQL কুয়েরি একবার কম্পাইল করা হয় এবং পরে শুধু প্যারামিটার পরিবর্তন করে একাধিক বার ব্যবহার করা যায়। এর ফলে কোডের পুনঃব্যবহারযোগ্যতা বাড়ে এবং কোড সহজ হয়।PreparedStatement
SQL কুয়েরি একবার কম্পাইল করার পরে, তা ডেটাবেসে ক্যাশে সেভ হয়ে থাকে। ফলে বারবার একই কুয়েরি চালানোর জন্য পুনরায় কম্পাইল করতে হয় না, যা পারফরম্যান্স বৃদ্ধি করে।PreparedStatement
ডেটাবেসের ভিন্নতার প্রতি আরো সহনশীল। SQL কুয়েরি একবার কম্পাইল হয়ে যাওয়ার কারণে, বিভিন্ন ডেটাবেসে এটি সহজে ব্যবহার করা যায়।PreparedStatement
এই সমস্যা প্রতিরোধ করতে পারে, কারণ এটি ইউজার ইনপুটকে একটি ভ্যালু হিসেবে গ্রহণ করে, যা কখনোই SQL কোড হিসেবে এক্সিকিউট হয় না।PreparedStatement
আমাদের SQL কুয়েরির ভিতরে এই প্যারামিটারগুলির জন্য প্লেসহোল্ডার (?
) ব্যবহার করতে দেয় এবং পরে সহজেই মান যোগ করতে সাহায্য করে।PreparedStatement
ডেটাবেসে SQL কুয়েরি কম্পাইল ও ক্যাশ করে রাখে, ফলে যদি আমরা একাধিকবার একই কুয়েরি চালাই, তাহলে কম্পাইলিং সময়ের প্রয়োজন হয় না এবং পারফরম্যান্স উন্নতি হয়।PreparedStatement
ব্যবহার করার ফলে অ্যাপ্লিকেশনটি SQL কুয়েরি এক্সিকিউশনের জন্য আরো দ্রুত এবং নিরাপদ হয়, যা প্রোডাকশন পরিবেশে গুরুত্বপূর্ণ।Spring JDBC এ JdbcTemplate
ক্লাস ব্যবহার করা হয়, যা PreparedStatement
এর সাথে ইন্টারঅ্যাক্ট করার জন্য একটি সিম্পল API প্রদান করে।
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import javax.sql.DataSource;
public class JdbcExample {
private JdbcTemplate jdbcTemplate;
public JdbcExample(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public void addUser(String name, String email) {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
jdbcTemplate.update(sql, new PreparedStatementSetter() {
@Override
public void setValues(java.sql.PreparedStatement ps) throws java.sql.SQLException {
ps.setString(1, name); // First parameter
ps.setString(2, email); // Second parameter
}
});
}
}
এখানে:
JdbcTemplate
ব্যবহার করে আমরা PreparedStatement
তৈরি করছি।setValues()
মেথডে PreparedStatement
এর প্যারামিটারগুলো সেট করা হচ্ছে, যা SQL কুয়েরি এক্সিকিউট করার আগে ইনপুট মান হিসাবে পাস করা হয়।Spring JDBC এবং PreparedStatement
একসাথে ব্যবহৃত হলে, ডেটাবেস অপারেশনগুলির জন্য নিরাপদ এবং দক্ষ কোড লেখা সম্ভব হয়।
Spring JDBC ডেটাবেস অপারেশনের জন্য সুবিধাজনক টুলস সরবরাহ করে। PreparedStatementCreator
এবং PreparedStatementSetter
হলো দুটি ইন্টারফেস, যা জটিল SQL কুয়েরি বা ডাইনামিক প্যারামিটার সেট করার জন্য ব্যবহার করা হয়। এগুলো ডেটাবেস ইন্টিগ্রেশনে আরও বেশি কাস্টমাইজেশন এবং নিরাপত্তা নিশ্চিত করে।
PreparedStatementCreator
ইন্টারফেস ব্যবহার করে, আপনি কাস্টম PreparedStatement
তৈরি করতে পারেন। এটি SQL কুয়েরি এবং তার প্যারামিটারগুলো ডাইনামিক্যালি সেট করার জন্য কার্যকর।
public interface PreparedStatementCreator {
PreparedStatement createPreparedStatement(Connection con) throws SQLException;
}
উপস্থিত ডেটাবেস কানেকশন দিয়ে একটি PreparedStatement
তৈরি করুন।
public int insertUserWithPreparedStatementCreator(User user) {
String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
return jdbcTemplate.update(con -> {
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getEmail());
return ps;
});
}
এখানে:
con -> { ... }
হলো PreparedStatementCreator
এর একটি ল্যাম্বডা ইমপ্লিমেন্টেশন।jdbcTemplate.update()
মেথডের মাধ্যমে ডেটাবেসে ডেটা ইনসার্ট করা হচ্ছে।PreparedStatementSetter
ইন্টারফেস ব্যবহার করে, একটি বিদ্যমান PreparedStatement
-এর প্যারামিটার সেট করা যায়। এটি সাধারণত যেখানে একই SQL বারবার ব্যবহার করা হবে সেসব ক্ষেত্রে কার্যকর।
public interface PreparedStatementSetter {
void setValues(PreparedStatement ps) throws SQLException;
}
ডাইনামিক প্যারামিটার সেট করার জন্য PreparedStatementSetter
ব্যবহার করুন।
public int updateUserWithPreparedStatementSetter(int id, String newEmail) {
String sql = "UPDATE users SET email = ? WHERE id = ?";
return jdbcTemplate.update(sql, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, newEmail);
ps.setInt(2, id);
}
});
}
এখানে:
PreparedStatementSetter
ইন্টারফেস ইমপ্লিমেন্ট করে প্যারামিটার সেট করা হয়েছে।jdbcTemplate.update()
মেথড SQL অপারেশন পরিচালনা করছে।কখনো কখনো PreparedStatementCreator
এবং PreparedStatementSetter
একত্রে ব্যবহার করতে হয়।
public int saveUser(User user) {
String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
PreparedStatementCreator psc = con -> {
PreparedStatement ps = con.prepareStatement(sql);
return ps;
};
PreparedStatementSetter pss = ps -> {
ps.setInt(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getEmail());
};
return jdbcTemplate.update(psc, pss);
}
ফিচার | PreparedStatementCreator | PreparedStatementSetter |
---|---|---|
কাজ | সম্পূর্ণ নতুন PreparedStatement তৈরি করতে ব্যবহার হয়। | বিদ্যমান PreparedStatement-এ প্যারামিটার সেট করতে ব্যবহার হয়। |
ব্যবহার | SQL কুয়েরি এবং প্যারামিটার ডাইনামিকভাবে তৈরি করা। | সাধারণত বারবার ব্যবহারযোগ্য কুয়েরি অপটিমাইজেশনে। |
প্রয়োগের পদ্ধতি | ল্যাম্বডা বা অ্যানোনিমাস ক্লাস। | ল্যাম্বডা বা অ্যানোনিমাস ক্লাস। |
public void batchInsertUsers(List<User> users) {
String sql = "INSERT INTO users (id, name, email) VALUES (?, ?, ?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
User user = users.get(i);
ps.setInt(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getEmail());
}
@Override
public int getBatchSize() {
return users.size();
}
});
}
PreparedStatement
-এর কারণে ডেটা সুরক্ষিত থাকে।PreparedStatementCreator
এবং PreparedStatementSetter
Spring JDBC এর শক্তিশালী ফিচার, যা ডাটাবেস ইন্টিগ্রেশনে আরও বেশি নিয়ন্ত্রণ এবং নিরাপত্তা নিশ্চিত করে।
NamedParameterJdbcTemplate স্প্রিং জেডিবিসি (Spring JDBC) এর একটি গুরুত্বপূর্ণ ক্লাস, যা SQL কুয়েরিতে নামকৃত প্যারামিটার ব্যবহার করার সুবিধা প্রদান করে। এটি সাধারণ JdbcTemplate
এর উন্নত সংস্করণ, যেখানে প্যারামিটারাইজড কুয়েরি তৈরির সময় নামকৃত প্যারামিটার (Named Parameters) ব্যবহার করা যায়, যা কোডকে আরও পাঠযোগ্য, সহজ এবং ভুলমুক্ত করে তোলে।
NamedParameterJdbcTemplate
একটি ক্লাস যা স্প্রিং জেডিবিসি ফ্রেমওয়ার্কের অংশ। এটি JdbcTemplate
এর মত কাজ করে, তবে এটি SQL কুয়েরি এক্সিকিউট করার সময় প্যারামিটারাইজড কুয়েরিতে নামকৃত প্যারামিটার ব্যবহার করার সুযোগ দেয়। এর মাধ্যমে SQL কুয়েরি লেখার সময় প্যারামিটারগুলি নাম দ্বারা চিহ্নিত করা হয়, যেমন :param1
, :param2
, ইত্যাদি।
?
চিহ্ন দ্বারা স্থাপন করা হয়, কিন্তু নামকৃত প্যারামিটার ব্যবহার করলে প্রতিটি প্যারামিটার কী কাজ করছে তা সহজে বোঝা যায়।?
প্যারামিটারগুলো সঠিকভাবে ব্যবহার করা কঠিন হতে পারে। নামকৃত প্যারামিটার ব্যবহার করলে প্যারামিটারগুলোর অবস্থান ও অর্থ স্পষ্ট হয়ে ওঠে, ফলে ভুল হওয়ার সম্ভাবনা কমে।ধরা যাক, আমাদের একটি Employee
টেবিল থেকে কিছু ডেটা পড়তে হবে যেখানে id
এবং name
প্যারামিটার হিসেবে ব্যবহার করা হবে।
প্রথমে, NamedParameterJdbcTemplate
এবং ডেটাবেস সংযোগ সেটআপ করা প্রয়োজন।
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;
public class DataSourceConfig {
public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
DataSource dataSource = dataSource();
return new NamedParameterJdbcTemplate(dataSource);
}
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
}
এখন, NamedParameterJdbcTemplate
ব্যবহার করে SQL কুয়েরি এক্সিকিউট করা হবে।
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import java.util.List;
import java.util.Map;
public class EmployeeDao {
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void setNamedParameterJdbcTemplate(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
}
public List<Employee> getEmployeesByIdAndName(int id, String name) {
String sql = "SELECT * FROM Employee WHERE id = :id AND name = :name";
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("id", id);
parameters.addValue("name", name);
return namedParameterJdbcTemplate.query(sql, parameters, new EmployeeRowMapper());
}
}
এখানে EmployeeRowMapper
হল একটি কাস্টম ক্লাস যা RowMapper
ইন্টারফেস ইমপ্লিমেন্ট করে, যেটি SQL কুয়েরি থেকে প্রাপ্ত রেকর্ডকে Employee
অবজেক্টে ম্যাপ করবে।
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class EmployeeRowMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
// আরও প্রপার্টি সেট করুন
return employee;
}
}
?
ব্যবহার না করে নামকৃত প্যারামিটার যেমন :id
, :name
ব্যবহার করতে পারা যায়, যা কোডের পাঠযোগ্যতা বাড়ায়।NamedParameterJdbcTemplate স্প্রিং জেডিবিসির একটি শক্তিশালী ক্লাস যা SQL কুয়েরিতে নামকৃত প্যারামিটার ব্যবহারের সুবিধা প্রদান করে। এটি কোডের পাঠযোগ্যতা এবং ডাইনামিক SQL কুয়েরি নির্মাণে সহায়ক। যখন SQL কুয়েরিতে অনেক প্যারামিটার থাকে, তখন এটি ব্যবহারের মাধ্যমে কোড সহজ এবং ভুলমুক্ত করা যায়।
NamedParameterJdbcTemplate
হলো JdbcTemplate
এর একটি সম্প্রসারণ, যা SQL কুয়েরিতে নামযুক্ত প্যারামিটার (Named Parameters) ব্যবহার করার সুবিধা প্রদান করে। সাধারণ JdbcTemplate
এর মাধ্যমে SQL কুয়েরি লেখা হয় যেখানে প্যারামিটারগুলো পজিশনাল (Positional Parameters) হিসেবে প্রদান করা হয় (যেমন ?
ব্যবহার করা হয়)। কিন্তু NamedParameterJdbcTemplate
এর মাধ্যমে SQL কুয়েরিতে প্যারামিটারগুলো নাম দিয়ে উল্লেখ করা হয়, যেমন :paramName
।
এই পদ্ধতিটি SQL কুয়েরি আরো পরিষ্কার, রিডেবল এবং নিরাপদ করে তোলে। বিশেষ করে যখন অনেক প্যারামিটার থাকে, তখন নামযুক্ত প্যারামিটার ব্যবহার করা কোডের মান এবং রক্ষণাবেক্ষণ সহজ করে।
:id
, :name
ইত্যাদি।import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;
public class DataSourceConfig {
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
}
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
public class EmployeeDao {
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
// DataSource Inject করা হচ্ছে
public void setDataSource(DataSource dataSource) {
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
// ইনসার্ট অপারেশন: নামযুক্ত প্যারামিটার ব্যবহার
public void insertEmployee(Employee employee) {
String sql = "INSERT INTO employee (id, name, age) VALUES (:id, :name, :age)";
Map<String, Object> params = new HashMap<>();
params.put("id", employee.getId());
params.put("name", employee.getName());
params.put("age", employee.getAge());
namedParameterJdbcTemplate.update(sql, params);
}
// ডেটাবেস থেকে এক্সিকিউট করা কুয়েরি: নামযুক্ত প্যারামিটার ব্যবহার
public Employee getEmployeeById(int id) {
String sql = "SELECT * FROM employee WHERE id = :id";
Map<String, Object> params = new HashMap<>();
params.put("id", id);
return namedParameterJdbcTemplate.queryForObject(sql, params, new EmployeeRowMapper());
}
}
:id
, :name
, :age
।Map<String, Object>
: একটি Map
তৈরি করা হয়েছে, যেখানে SQL প্যারামিটারগুলির নাম (যেমন id
, name
, age
) কীগুলি এবং তাদের মান মানগুলি হিসেবে স্টোর করা হয়েছে।MapSqlParameterSource
(অপশনাল): Map<String, Object>
এর পরিবর্তে MapSqlParameterSource
ব্যবহার করেও নামযুক্ত প্যারামিটার পাস করা যায়, যা আরো সুবিধাজনক এবং স্পষ্ট।MapSqlParameterSource
ব্যবহার উদাহরণ:import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
public void insertEmployee(Employee employee) {
String sql = "INSERT INTO employee (id, name, age) VALUES (:id, :name, :age)";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("id", employee.getId());
params.addValue("name", employee.getName());
params.addValue("age", employee.getAge());
namedParameterJdbcTemplate.update(sql, params);
}
এখানে MapSqlParameterSource
ব্যবহার করা হয়েছে যা Map<String, Object>
এর থেকে আরও ক্লিন এবং সুবিধাজনক।
স্প্রিং জেডিবিসি এর NamedParameterJdbcTemplate
নামযুক্ত প্যারামিটার ব্যবহারের মাধ্যমে ডেটাবেস অপারেশন আরও সহজ, পরিষ্কার এবং নিরাপদ করে তোলে। এটি কোডের রিডেবিলিটি এবং রক্ষণাবেক্ষণ সহজ করে এবং বিশেষত জটিল কুয়েরি ও প্যারামিটার ব্যবস্থাপনার ক্ষেত্রে খুবই কার্যকর।
Read more